#include "gtest/gtest.h"
#include "memoryData.h"
#include "Facade.h"
#include <map>

using namespace mem;

TEST(HelloTest, testInsertOrUpdate){
	std::map<std::string, std::string>  map;
	ASSERT_EQ(0, initMemoryData(map));

	SBAODAN order = {
		.iO00 = 1234567890, // 报单编号（20位 ：8位交易日 + 2位市场代码 + 2位保留特殊标识 + 8位序列号)
		.iM30 = 11, // 客户代码（12位）10位数字  筛选条件5； 查询排序1
		.iT11 = 5678, // 申请日期（yyyyMMdd）
		.iT12 = 1234, // 申报时间（HH:MM:SS） 显示排序2；查询排序5
		.iT22 = 1234, // 撤消时间（HH:MM:SS）
		.iX05 = 8, // 消息序号，8~9位数字(唯一序号) 更新的依据，报文存在 同一O00报文的多个X05, 最大的X05为最新。
		.iM20 = 1, // 交易席位代码（4位会员代码，2位序号）  筛选条件4；
		.iO07 = 1, // 申报数量 8全数字 查询排序6
		.iO08 = 2, // 剩余数量，8位数字 
		.iO06 = 31, // 申报价格，8位数字 查询排序5
		.iT12_part = 50,  // T12(若大于20点则-200000，小于20点则+40000)
		.sM20_part = 12, // M20的前四位
		//.sM60 = "cheng", // 交易员代码 10位字母数字字符
		//.sT02 = "abcde", // 撤消员代码 10位字母数字字符
		//.sO01 = "hello", // 本地报单号 14位数字
		.cI10 = '1', // 合约代码    筛选条件1；查询排序2
		.cI00 = '0', // 市场
		.cO15 = '1', // 报单指令类型 筛选条件2；
		.cO02 = 's', // 买卖方向    查询排序4
		.cO09 = 'o', // 订单状态    筛选条件3；
		.cO03 = 's', // 开平标志
		.cO65 = '1', // 类型
		.cT82 = '9', // 来源
	};
	strncpy(order.sM60, "chenglun", sizeof(order.sM60));
	strncpy(order.sT02, "abcde", sizeof(order.sT02));
	strncpy(order.sO01, "hello", sizeof(order.sO01));

	ASSERT_EQ(0, getCount(INDEX_BAODAN));

	ASSERT_EQ(0, insertOrUpdateData(INDEX_BAODAN, reinterpret_cast<void*>(&order)));
	ASSERT_EQ(1, getCount(INDEX_BAODAN));

	deinitMemoryData();
}

//TEST(HelloTest, testQuery){
//}
//TEST(HelloTest, testFilter){
//}
//TEST(HelloTest, testDumpToDisk){
//}
//TEST(HelloTest, testLoadFromDisk){
//}


